OVERZICHT VAN DE 80386-CODE SUMMARY OF 80386-CODE d: richting. Als dit bit 1 is, dan is het datatransport in omgekeerde richting d: direction. When this bit is set, data is moved in the other direction. w: woord. Als dit bit 1 is, dan is de data 16 (of 32) bits (anders 8). w: word. When this bit is sit, data is 16 or 32 bits (8 otherwise) s: sign-extend. Als dit bit 1 is, dan is de brondata 8 bits, waarvan het hoogste bit gepropageerd wordt. s: sign-extend. When this bit is set, source data is 8 bits and the highest bit will be propagated. rrr: register cccc: voorwaarde cccc: condition M/: mod/rm-byte I: immediate data hex binair mnemonisch 00 M 0000 00dw ADD memory,register 04 I 0000 010w ADD register,immediate 06 0000 011d PUSH, POP ES 08 M 0000 00dw OR memory,register 0C I 0000 010w OR register,immediate 0E 0000 0110 PUSH CS 0F 0000 0111 Zie verderop 10 M 0000 00dw ADC memory,register 14 I 0000 010w ADC register,immediate 16 0000 011d PUSH, POP SS 18 M 0000 00dw SBB memory,register 1C I 0000 010w SBB register,immediate 1E 0000 011d PUSH, POP DS 20 M 0000 00dw AND memory,register 24 I 0000 010w AND register,immediate 26 0000 0110 ES: prefix 27 0000 0111 DAA 28 M 0000 00dw SUB memory,register 2C I 0000 010w SUB register,immediate 2E 0000 0110 CS: prefix 2F 0000 0111 DAS 30 M 0000 00dw XOR memory,register 34 I 0000 010w XOR register,immediate 36 0000 0110 SS: prefix 37 0000 0111 AAA 38 M 0000 00dw CMP memory,register 3C I 0000 010w CMP register,immediate 3E 0000 0110 DS: prefix 3F 0000 0111 AAS 40 0100 0rrr INC wordregister 48 0100 1rrr DEC wordregister 50 0101 drrr PUSH, POP wordregister 60 0110 000d PUSHA, POPA 62 M 0110 0010 BOUND wordregister,memory 63 M 0110 0011 ARPL memory,wordregister 64 0110 0100 80386 FS: prefix, NEC REPNC 65 0110 0101 80386 GS: prefix, NEC REPC 66 0110 0110 80386 OS prefix 67 0110 0111 80386 AS prefix 68 I 0110 10s0 PUSH immediate 69 M I 0110 10s1 IMUL register,memory,immediate 6C 0110 11dw INS, OUTS 70 I 0111 cccc J voorwaardelijk 80 M/0 1000 00sw ..00 0... ADD memory,immediate 80 M/1 1000 00sw ..00 1... OR memory,immediate 80 M/2 1000 00sw ..01 0... ADC memory,immediate 80 M/3 1000 00sw ..01 1... SBB memory,immediate 80 M/4 1000 00sw ..10 0... AND memory,immediate 80 M/5 1000 00sw ..10 1... SUB memory,immediate 80 M/6 1000 00sw ..11 0... XOR memory,immediate 80 M/7 1000 00sw ..11 1... CMP memory,immediate 82 1000 0010 niet gedefinieerd 84 M 1000 010w TEST memory,register 86 M 1000 011w XCHG memory,register 88 M 1000 10dw MOV memory,register 8C M 1000 11d0 MOV memory,segmentregister 8D M 1000 1101 LEA wordregister,memory 8F M/0 1000 1111 ..00 0... POP memory 90 1001 0rrr XCHG AX,wordregister 98 1001 100w CBW, CWD 9A I 1001 1010 CALL intersegment 9B 1001 1011 WAIT 9C 1001 110d PUSHF, POPF 9E 1001 111d SAHF, LAHF A0 M 1010 00dw MOV register,memory A4 1010 010w MOVS A6 1010 011w CMPS A8 I 1010 100w TEST AL,immediate, TEST AX,immediate AA 1010 101w STOS AC 1010 110w LODS AE 1010 111w SCAS B0 I 1011 wrrr MOV register,immediate C0 M/0 I 1100 000w ..00 0... ROL memory,immediate C0 M/1 I 1100 000w ..00 1... ROR memory,immediate C0 M/2 I 1100 000w ..01 0... RCL memory,immediate C0 M/3 I 1100 000w ..01 1... RCR memory,immediate C0 M/4 I 1100 000w ..10 0... SHL memory,immediate C0 M/5 I 1100 000w ..10 1... SHR memory,immediate C0 M/6 I 1100 000w ..11 0... niet gedefinieerd C0 M/7 I 1100 000w ..11 1... SAR memory,immediate C2 I 1100 0010 RET immediate C3 1100 0011 RET C4 M 1100 0100 LES wordregister,memory C5 M 1100 0101 LDS wordregister,memory C6 M/0 I 1100 011w ..00 0... MOV memory,immediate C6 M/1 1100 011w ..00 1... Niet gedefinieerd C6 M/2 1100 011w ..01 .... Niet gedefinieerd C6 M/4 1100 011w ..1. .... Niet gedefinieerd C8 I I 1100 1000 ENTER word,byte C9 1100 1001 LEAVE CA I 1100 1010 RETF word CB 1100 1011 RETF CC 1100 1100 INT 3 CD I 1100 1101 INT byte CE 1100 1110 INTO CF 1100 1111 IRET D0 M/0 1101 000w ..00 0... ROL memory,1 D0 M/1 1101 000w ..00 1... ROR memory,1 D0 M/2 1101 000w ..01 0... RCL memory,1 D0 M/3 1101 000w ..01 1... RCR memory,1 D0 M/4 1101 000w ..10 0... SHL memory,1 D0 M/5 1101 000w ..10 1... SHR memory,1 D0 M/6 1101 000w ..11 0... niet gedefinieerd D0 M/7 1101 000w ..11 1... SAR memory,CL D2 M/0 1101 001w ..00 0... ROL memory,CL D2 M/1 1101 001w ..00 1... ROR memory,CL D2 M/2 1101 001w ..01 0... RCL memory,CL D2 M/3 1101 001w ..01 1... RCR memory,CL D2 M/4 1101 001w ..10 0... SHL memory,CL D2 M/5 1101 001w ..10 1... SHR memory,CL D2 M/6 1101 001w ..11 0... niet gedefinieerd D2 M/7 1101 001w ..11 1... SAR memory,CL D4 I 1101 0100 AAM D5 I 1101 0101 AAD D6 1101 0110 ongedefinieerd D7 1101 0111 XLAT D8 M/0 1101 1000 ..00 0... FADD dword D8 M/1 1101 1000 ..00 1... FMUL dword D8 M/2 1101 1000 ..01 0... FCOM dword D8 M/3 1101 1000 ..01 1... FCOMP dword D8 M/4 1101 1000 ..10 0... FSUB dword D8 M/5 1101 1000 ..10 1... FSUBR dword D8 M/6 1101 1000 ..11 0... FDIV dword D8 M/7 1101 1000 ..11 1... FDIVR dword D8 C0 1101 1000 1100 0iii FADD 0,i D8 C8 1101 1000 1100 1iii FMUL 0,i D8 D0 1101 1000 1101 0iii FCOM 0,i D8 D8 1101 1000 1101 1iii FCOMP 0,i D8 E0 1101 1000 1110 0iii FSUB 0,i D8 E8 1101 1000 1110 1iii FSUBR 0,i D8 F0 1101 1000 1111 0iii FDIV 0,i D8 F8 1101 1000 1111 1iii FDIVR 0,i D9 M/0 1101 1001 ..00 0... FLD dword D9 M/1 1101 1001 ..00 1... niet gedefinieerd D9 M/2 1101 1001 ..01 0... FST dword D9 M/3 1101 1001 ..01 1... FSTP dword D9 M/4 1101 1001 ..10 0... FLDENV dword D9 M/5 1101 1001 ..10 1... FLDCW dword D9 M/6 1101 1001 ..11 0... FSTENV dword D9 M/7 1101 1001 ..11 1... FSTCW dword D9 C0 1101 1001 1100 0iii FLD i D9 C8 1101 1001 1100 1iii FXCH 0,i D9 D0 1101 1001 1101 0000 FNOP D9 D1 1101 1001 1101 iii1 niet gedefinieerd D9 D2 1101 1001 1101 ii1i niet gedefinieerd D9 D4 1101 1001 1101 i1ii niet gedefinieerd D9 D8 1101 1001 1101 1iii niet gedefinieerd D9 E0 1101 1001 1110 0000 FCHS D9 E1 1101 1001 1110 0001 FABS D9 E2 1101 1001 1110 0010 niet gedefinieerd D9 E3 1101 1001 1110 0011 niet gedefinieerd D9 E4 1101 1001 1110 0100 FTST D9 E5 1101 1001 1110 0101 FXAM D9 E6 1101 1001 1110 0110 niet gedefinieerd D9 E7 1101 1001 1110 0111 niet gedefinieerd D9 E8 1101 1001 1110 1000 FLD1 D9 E9 1101 1001 1110 1001 FLDL2T D9 EA 1101 1001 1110 1010 FLDL2E D9 EB 1101 1001 1110 1011 FLDPI D9 EC 1101 1001 1110 1100 FLDLG2 D9 ED 1101 1001 1110 1101 FLDLN2 D9 EE 1101 1001 1110 1110 FLDZ D9 EF 1101 1001 1110 1111 niet gedefinieerd D9 F0 1101 1001 1111 0000 F2XM1 D9 F1 1101 1001 1111 0001 FYL2X D9 F2 1101 1001 1111 0010 FPTAN D9 F3 1101 1001 1111 0011 FPATAN D9 F4 1101 1001 1111 0100 FXTRACT D9 F5 1101 1001 1111 0101 FPREM1 D9 F6 1101 1001 1111 0110 FDECSTP D9 F7 1101 1001 1111 0111 FINCSTP D9 F8 1101 1001 1111 1000 FPREM D9 F9 1101 1001 1111 1001 FYL2XP1 D9 FA 1101 1001 1111 1010 FSQRT D9 FB 1101 1001 1111 1011 FSINCOS D9 FC 1101 1001 1111 1100 FRNDINT D9 FD 1101 1001 1111 1101 FSCALE D9 FE 1101 1001 1111 1110 FSIN D9 FF 1101 1001 1111 1111 FCOS DA M/0 1101 1010 ..00 0... FIADD dword DA M/1 1101 1010 ..00 1... FIMUL dword DA M/2 1101 1010 ..01 0... FICOM dword DA M/3 1101 1010 ..01 1... FICOMP dword DA M/4 1101 1010 ..10 0... FISUB dword DA M/5 1101 1010 ..10 1... FISUBR dword DA M/6 1101 1010 ..11 0... FIDIV dword DA M/7 1101 1010 ..11 1... FIDIVR dword DA C0 1101 1010 110. .... niet gedefinieerd DA E0 1101 1010 1110 0... niet gedefinieerd DA E0 1101 1010 1110 1000 niet gedefinieerd DA E9 1101 1010 1110 1001 FUCOMPP DA EA 1101 1010 1110 1.1. niet gedefinieerd DA EC 1101 1010 1110 11.. niet gedefinieerd DB M/0 1101 1011 ..00 0... FILD dword DB M/1 1101 1011 ..00 1... niet gedefinieerd DB M/2 1101 1011 ..01 0... FIST dword DB M/3 1101 1011 ..01 1... FISTP dword DB M/4 1101 1011 ..10 0... DB M/5 1101 1011 ..10 1... FLD tword DB M/6 1101 1011 ..11 0... DB M/7 1101 1011 ..11 1... FSTP tword DB E0 1101 1011 1110 0000 FENI DB E1 1101 1011 1110 0001 FDISI DB E2 1101 1011 1110 0010 FCLEX DB E3 1101 1011 1110 0011 FINIT DB E4 1101 1011 1110 0100 FSETPM DB E5 1101 1011 1110 0101 niet gedefinieerd DB E6 1101 1011 1110 0110 niet gedefinieerd DB E7 1101 1011 1110 0111 niet gedefinieerd DB E8 1101 1011 1110 1000 FBANK 0 DB E9 1101 1011 1110 1001 niet gedefinieerd DB EA 1101 1011 1110 1010 FBANK 2 DB EB 1101 1011 1110 1011 FBANK 1 DB F0 1101 1011 1111 0000 niet gedefinieerd DB F1 1101 1011 1111 0001 F4X4 DB F2 1101 1011 1111 001. niet gedefinieerd DB F4 1101 1011 1111 01.. niet gedefinieerd DB F8 1101 1011 1111 1... niet gedefinieerd DC M/0 1101 1100 ..00 0... FADD qword DC M/1 1101 1100 ..00 1... FMUL qword DC M/2 1101 1100 ..01 0... FCOM qword DC M/3 1101 1100 ..01 1... FCOMP qword DC M/4 1101 1100 ..10 0... FSUB qword DC M/5 1101 1100 ..10 1... FSUBR qword DC M/6 1101 1100 ..11 0... FDIV qword DC M/7 1101 1100 ..11 0... FDIVR qword DC C0 1101 1100 1100 0rrr FADD i,0 DC C8 1101 1100 1100 1rrr FMUL i,0 DC D0 1101 1100 1101 .... niet gedefinieerd DC E0 1101 1100 1110 0rrr FSUBR i,0 DC E8 1101 1100 1101 1... niet gedefinieerd DC F0 1101 1100 1111 0rrr FDIVR i,0 DC F8 1101 1100 1111 1rrr FDIV i,0 DD M/0 1101 1101 ..00 0... FLD qword DD M/1 1101 1101 ..00 1... niet gedefinieerd DD M/2 1101 1101 ..01 0... FST qword DD M/3 1101 1101 ..01 1... FSTP qword DD M/4 1101 1101 ..10 0... FRSTOR DD M/5 1101 1101 ..10 1... niet gedefinieerd DD M/6 1101 1101 ..11 0... FSAVE DD M/7 1101 1101 ..11 1... FSTSW word DD C0 1101 1101 1100 0rrr FFREE i DD C8 1101 1101 1100 1... niet gedefinieerd DD D0 1101 1101 1101 0rrr FST i DD D8 1101 1101 1101 1rrr FSTP i DD E0 1101 1101 1110 0rrr FUCOM i DD E8 1101 1101 1110 1rrr FUCOMP i DD F0 1101 1101 1111 0rrr niet gedefinieerd DD F8 1101 1101 1111 1rrr niet gedefinieerd DE M/0 1101 1110 ..00 0... FIADD word DE M/1 1101 1110 ..00 1... FIMUL word DE M/2 1101 1110 ..01 0... FICOM word DE M/3 1101 1110 ..01 1... FICOMP word DE M/4 1101 1110 ..10 0... FISUB word DE M/5 1101 1110 ..10 1... FISUBR word DE M/6 1101 1110 ..11 0... FIDIV word DE M/7 1101 1110 ..11 1... FIDIVR word DE C0 1101 1110 1100 0rrr FADDP i,0 DE C8 1101 1110 1100 1rrr FMULP i,0 DE D0 1101 1110 1100 0... niet gedefinieerd DE D0 1101 1110 1100 1000 niet gedefinieerd DE D9 1101 1110 1100 1001 FCOMPP DE DA 1101 1110 1100 1.1. niet gedefinieerd DE DC 1101 1110 1100 11.. niet gedefinieerd DE E0 1101 1110 1110 0rrr FSUBRP i,0 DE E8 1101 1110 1110 1rrr FSUBP i,0 DE F0 1101 1110 1111 0rrr FDIVRP i,0 DE F8 1101 1110 1111 1rrr FDIVP i,0 DF M/0 1101 1111 ..00 0... FILD word DF M/1 1101 1111 ..00 1... niet gedefinieerd DF M/2 1101 1111 ..01 0... FIST word DF M/3 1101 1111 ..01 1... FISTP word DF M/4 1101 1111 ..10 0... FBLD tword DF M/5 1101 1111 ..10 1... FILD qword DF M/6 1101 1111 ..11 0... FBSTP tword DF M/7 1101 1111 ..11 1... FISTP qword DF C0 1101 1111 110. .... niet gedefinieerd DF E0 1101 1111 1110 0000 FSTSW AX DF E1 1101 1111 1110 0001 niet gedefinieerd DF E2 1101 1111 1110 001. niet gedefinieerd DF E4 1101 1111 1110 01.. niet gedefinieerd DF E8 1101 1111 1110 1... niet gedefinieerd DF F0 1101 1111 1111 .... niet gedefinieerd E0 1110 0000 LOOPNE E1 1110 0001 LOOPE E2 1110 0010 LOOP E3 1110 0011 J(E)CXZ E4 1110 00dw IN, OUT (immediate port-address) E8 1110 1000 CALL E9 1110 1001 JMP NEAR EA 1110 1010 JMP FAR EB 1110 1011 JMP SHORT EC 1110 11dw IN, OUT (port-address in DX) F0 1111 0000 LOCK: prefix F1 1111 0001 niet gedefinieerd F2 1111 0010 REPNE: prefix F3 1111 0011 REPE: prefix F4 1111 0100 HLT F5 1111 0101 CMC F6 M/0 1111 011w ..00 0... TEST F6 M/1 1111 011w ..00 1... niet gedefinieerd F6 M/2 1111 011w ..01 0... NOT F6 M/3 1111 011w ..01 1... NEG F6 M/4 1111 011w ..10 0... MUL F6 M/5 1111 011w ..10 1... IMUL F6 M/6 1111 011w ..11 0... DIV F6 M/7 1111 011w ..11 1... IDIV F8 1111 1000 CLC F9 1111 1001 STC FA 1111 1010 CLI FB 1111 1011 STI FC 1111 1100 CLD FD 1111 1101 STD FE M/0 1111 111w ..00 0... INC FE M/1 1111 111w ..00 1... DEC FE M/2 1111 1110 ..01 .... niet gedefinieerd FE M/4 1111 1110 ..1. .... niet gedefinieerd FF M/2 1111 1111 ..01 0... CALL NEAR INDIRECT FF M/3 1111 1111 ..01 1... CALL FAR INDIRECT FF M/4 1111 1111 ..10 0... JMP NEAR INDIRECT FF M/5 1111 1111 ..10 1... JMP FAR INDIRECT FF M/6 1111 1111 ..11 0... PUSH FF M/7 1111 1111 ..11 1... niet gedefinieerd instructies die beginnen met 0F 0F 00 M/0 0000 0000 ..00 0... SLDT 0F 00 M/1 0000 0000 ..00 1... STR 0F 00 M/2 0000 0000 ..01 0... LLDT 0F 00 M/3 0000 0000 ..01 1... LTR 0F 00 M/4 0000 0000 ..10 0... VERR 0F 00 M/5 0000 0000 ..10 1... VERW 0F 01 M/0 0000 0001 ..00 0... SGDT 0F 01 M/1 0000 0001 ..00 1... SIDT 0F 01 M/2 0000 0001 ..01 0... LGDT 0F 01 M/3 0000 0001 ..01 1... LIDT 0F 01 M/4 0000 0001 ..10 0... SMSW 0F 01 M/6 0000 0001 ..11 0... LMSW 0F 02 0000 0010 LAR 0F 03 0000 0011 LSL 0F 05 0000 0101 LOADALL zie voetnoot 0F 06 0000 0110 CLTS 0F 10 0001 i00w TESTBIT (NEC) 0F 12 0001 i01w CLRBIT (NEC) 0F 14 0001 i10w SETBIT (NEC) 0F 16 0001 i11w NOTBIT (NEC) 0F 20 0010 00d0 MOV reg,CR 0F 21 0010 00d1 MOV reg,DR 0F 24 0010 01d0 MOV reg,TR 0F 28 0010 1000 ROL4 (NEC) 0F 2A 0010 1010 ROR4 (NEC) 0F 20 0010 0000 ADD4S (NEC) 0F 22 0010 0010 SUB4S (NEC) 0F 26 0010 0110 CMP4S (NEC) 0F 31 0011 i001 STOBITS (NEC) 0F 33 0011 i011 LODBITS (NEC) 0F 80 1000 cccc J voorwaardelijk 0F 90 M/0 1001 cccc ..00 0... SET voorwaardelijk 0F A0 1010 000d PUSH,POP FS zie voetnoot 0F A2 1010 0010 niet gedefinieerd 0F A3 1010 0011 BT 0F A4 1010 0100 SHLD immediate 0F A5 1010 0101 SHLD CL 0F A8 1010 100d PUSH,POP GS zie voetnoot 0F AB 1010 1011 BTS 0F AC 1010 1100 SHRD immediate 0F AD 1010 1101 SHRD CL 0F AF 1010 1111 IMUL 0F B0 1011 000w ongedefinieerd 0F B2 1011 0010 LSS 0F B3 1011 0011 BTR 0F B4 1011 0100 LFS 0F B5 1011 0101 LGS 0F B6 1011 011w MOVZX 0F BA M/4 1011 1010 ..10 0... BT 0F BA M/5 1011 1010 ..10 1... BTS 0F BA M/6 1011 1010 ..11 0... BTR 0F BA M/7 1011 1010 ..11 1... BTC 0F BB 1011 1011 BTC 0F BC 1011 1100 BSF 0F BD 1011 1101 BSR 0F BE 1011 111w MOVSX 0F FF 1111 1111 CALL80 (NEC) Voetnoten: LOADALL (0F 05) 00001111 00000101 is een ongedocumenteerde instructie die alleen op de 80286 werkt. PUSH/POP segmentregister (0F 80) 00001111 10...00d In meerdere boeken heb ik gelezen dat deze instructie met alle segmentregisters werkt. Dit is niet juist. Deze instructie werkt alleen met FS en GS, respectievelijk gecodeerd als 100 en 101. De opcodes zijn dus (0F A0) 00001111 1010.00d Probeert men segmentregister CS, DS, ES of SS, dan krijgt men namelijk de opcodes 00001111 100..00d welke een andere betekenis hebben. Footnotes: LOADALL (0F 05) is an undocumented instruction which works on the 80286 only. PUSH/POP segment register (0F 80) 00001111 10...00d In several books I have read that this instruction can work with any segment register . This is not correct. This instruction works with FS and GS only, and these are coded as 100 and 1001. So the opcodes are 00001111 1010.00d If you try CS, DS, ES or SS, the opcodes would be 00001111 100..00d and these have another meaning.